<?php

/**
 * usuario actions.
 *
 * @package    comande
 * @subpackage usuario
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class usuarioActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */

   public function preExecute()
  {
     /*if(sfConfig::get('app_domain')=='server')
     {
          $simpleSAMLAuth = new SimpleSAML_Auth_Simple('default-sp');
          if (!$simpleSAMLAuth->isAuthenticated())
          {
               return $this->redirect('saml/logout');
          }
     }    */

  }
  
 public function executeIndex(sfWebRequest $request)
 {

    //$service = new serviceAceptor();
    //date_default_timezone_set($service->getTimezone());

    $email = $this->getUser()->getFlash('singInEmail');
    $name  = $this->getUser()->getFlash('singName');
    $view  = $this->getUser()->getFlash('view');
    if($view=="confirmation")
    {
        $this->email = $email;
        return sfView::SUCCESS;

    }
    elseif($view=="notconfirmation")
    {
        return "Notconfirmation";
    }
    else
    {
        return sfView::ERROR;

    }

 }

  //serivio de logueo a la plataforma
  public function executeAcceso(sfWebRequest $request)
  {
      //recibimos los parametros
   $email = $request->getParameter('txtemail_acc');
   $password = $request->getParameter('txtpassword_acc');

   //validadores
    $email_validador = new sfValidatorEmail();
    $caracteres_validador =new sfValidatorRegex(array('pattern' => '/^\w+$/'));
    $contador = 2;
    $flag = 0;
    // validamos las entradas
    try {
     $email_validador->clean($email);
     $this->getUser()->setFlash('emai_val_acc','');

   }catch(sfValidatorError $e){
      $this->getUser()->setFlash('emai_val_acc',"Email Invalido");
      $contador--;
      }

      //Password
       try {
     $caracteres_validador->clean($password);
     $this->getUser()->setFlash('pass_val_acc','');

   }catch(sfValidatorError $e){
      $this->getUser()->setFlash('pass_val_acc',"password Incorrecto");
      $contador--;
      }
      //si las validaciones son correctas
      if($contador == 2){

          //verifico en practil si esta el usuario registrado
          //obtengo el pk del usuario en practil
      $servicio_practil = 'http://practil.com/xml_servicio_usuario/retornar_usuario_practil?';
      $token= "esferadigital";
      $token = md5($token);
      $servicio_practil = $servicio_practil.'email='.$email.'&token='.$token;
      $lib = new myLib();
      $respuesta = file_get_contents($servicio_practil);
      $result = $lib->xml2array($respuesta);

      $items=$result['practil'];
       foreach ($items as $item){
           if(isset($item['code'])){
                 if($item['code'] == "60001" ){
                    $this->getUser()->setAttribute('ses_user_id_practil',$item['pkusuario']);
                 }else{
                     //$this->getUser()->setFlash('mensaje_error','Usuario no encontrado en practil');
                    // $this->redirect('@homepage');
                    $flag = 1;

                 }
           }else{
               $flag = 1;
           }
       }
       if( $flag == 1){
              $this->redirect('@homepage');
           }else{
            //usuario no existe en practil

          $new_busqueda = new Criteria();
          $new_busqueda->add(UsuarioPeer::EMAIL, $email, Criteria::LIKE);
          $cantidad_usuario = UsuarioPeer::doCount($new_busqueda);
          if($cantidad_usuario > 0){

               $usuario_encontrado = UsuarioPeer::doSelectOne($new_busqueda);

          //Comparo password
          $password = md5($password);

          if($password != $usuario_encontrado->getPassword()){

         // $this->getUser()->setFlash('mensaje_error','El Password es incorrecto');
          $this->redirect('@homepage');
          }else{ //si el password es correcto
            
//lleno sessiones
           /* Crea variables de sesion del usuario Registrado */

                $this->getUser()->setAttribute('ses_user_id',$usuario_encontrado->getId());
                $this->getUser()->setAttribute('ses_user_nombre',$usuario_encontrado->getNombres());
                $this->getUser()->setAttribute('ses_user_ape',$usuario_encontrado->getApellidos());
                $this->getUser()->setAttribute('ses_user_empresa',$usuario_encontrado->getEmpresa());
                $this->getUser()->setAttribute('ses_user_correo',$usuario_encontrado->getEmail());


                $this->redirect('monitoreo/index');

          }


          }else{
          //$this->getUser()->setFlash('mensaje_error','Email no se encuentra registrado en comnade!');
            //usuario no existe en comande
          $this->redirect('@homepage');
          }



       }


      }else{

      // $this->getUser()->setFlash('mensaje_error','Ingrese los datos correctos!');
          $this->redirect('@homepage');
      }



  }
  // este servicio se encarga de registrar a los usuarios usando un webservice de practil

public function executeUsuario_registro(sfWebRequest $request)
{


       
      //recibo parametros
      $nombres         = $request->getParameter('txt_nombres');
      $apellidos       = $request->getParameter('txt_apellidos');    
      $email           = $request->getParameter('txt_email');
      $password        = $request->getParameter('txt_password');
      $password_con    = $request->getParameter('txt_passwordCon');
      $token_security  = $request->getParameter('hd-token-signin');
      
      
      $contador = 0;
      $cadenas_validador = new sfValidatorString(array('required' => true));  
      $email_validador   = new sfValidatorEmail();
      $servicioComande   = new serviceComande();

      try {
          $cadenas_validador->clean($nombres);
          $contador++;
      }catch(sfValidatorError $e){ }
      try {
          $cadenas_validador->clean($apellidos);
          $contador++;
      }catch(sfValidatorError $e){ }
      try {
          $email_validador->clean($email);
          $contador++;
      }catch(sfValidatorError $e){ }
      try {
          $cadenas_validador->clean($password);
          $contador++;
      } catch (sfValidatorError $e) {}
      if($password == $password_con)
      {
          $contador++;
      } 
   

   if($contador == 5)
   {

        /*
             * 1 = necesita verificacion
             * 2 = NO necesita verificacion
        */

       $necesita_verificacion =  ($token_security!="null")?  2 :  1;       
        
      

            $conection = Propel::getConnection();
            $conection->beginTransaction();

      
            $success_local =  $servicioComande->RegistrarUsuarioComande($nombres, $apellidos, $email, $password, 1);
    
            if($success_local['success'])
            //si es se graba correctamente
            {
                     //obtengo al objeto grabado
                     $userBean = $success_local['object'];
                     // aca genero la url para grabarlo en la BD de practil
                   
                     $url = $servicioComande->returnUrlRegisterUser($userBean->getNombres(), $userBean->getApellidos(), md5($userBean->getPassword()), $userBean->getEmail(), sfConfig::get('app_aplication_id'),$necesita_verificacion);
                    
                     // genero el registro y espero una respuesta
                     $respuesta_registrar = file_get_contents($url);
                     // la respuesta esta en formato json asi que lo decofico
                     $decode = json_decode($respuesta_registrar);
                     $codigo_respuesta = $decode->{'success'};
                     $token_account    = $decode->{'stoken'};
                     $pk_account       = $decode->{'accountpk'};

                    if($codigo_respuesta)
                    // si la respuesta es true
                    {
                          // actualizo en campo del la tabla de UsuarioAceptor(IDPRACTIL => esto me sirve para reconocer como estan relacionados la BDPractil y BDAceptor)
                         $success_local = $servicioComande->userAsociatePractilId($userBean,$pk_account);
                         if($success_local)
                         {
                              /*
                               * ahora que ya esta grabado en la BD de practil y de aceptor
                               * -Verifico si necesita enviale un correo de verificacion para validar que su correo sea correcto
                               * -si la se envio exitosamente
                               */

                              if($necesita_verificacion==1)
                              {

                                     $success_email = $this->send_mail_comande($token_account,$userBean->getEmail());

                                     if($success_email)
                                      {
                                         $this->getUser()->setFlash('view','confirmation');
                                         $this->getUser()->setFlash('singInEmail', $userBean->getEmail());
                                         $this->getUser()->setFlash('singName', $userBean->getApellidos());
                                         $conection->commit();
                                         return $this->redirect('@sign_in_user');
                                      }
                                      else
                                      {
                                        $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'No se pudo enviar el email de confirmacion!');
                                        $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
                                        $conection->rollBack();
                                        $this->redirect('@homepage');
                                      }
                              }
                              else
                              {
                                       $this->getUser()->setFlash('view','notconfirmation');
                                       $this->getUser()->setFlash('singInEmail', $userBean->getEmail());
                                       $this->getUser()->setFlash('singName', $userBean->getApellidos());
                                       $conection->commit();
                                       return $this->redirect('@sign_in_user');
                              }

                          }
                          else
                          {
                                $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'Ups, No se asocio cuenta correctamente!');
                                $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
                                $conection->rollBack();
                                $this->redirect('@homepage');
                          }
                    }
                    else
                    {
                             if($decode->{'code'} == "p-10003" )
                             {
                                  $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'El correo ingresado ya se encuentra registrado.');
                                  $this->getUser()->setAttribute('message_sign_in',$respt);
                                  $conection->rollBack();
                                  $this->redirect('@homepage');
                             }
                             elseif($decode->{'code'} =="p-20009")
                             {
                                  $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'El correo ya se encuentra asociado a una cuenta!');
                                  $this->getUser()->setAttribute('message_sign_in',$respt);
                                  $conection->rollBack();
                                  $this->redirect('@homepage');
                             }
                             else
                             {
                                 $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'Ups, error url');
                                 $this->getUser()->setAttribute('message_sign_in',$respt);
                                 $conection->rollBack();
                                 $this->redirect('@homepage');
                             }
                     }
                
            }
            else
            {                
                $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$success_local);
                $conection->rollBack();
                $this->redirect('@homepage');
            }

       
        
   }
   else
   {
        $respt =  array('firtname'=>$nombres,'lastname'=>$apellidos,'email'=>$email,'password'=>$password,'message' =>'Error en los campos del formulario.');
        $message_sign_in = $this->getUser()->setAttribute('message_sign_in',$respt);
        $this->redirect('@homepage');
   }

}

 public function executeCerrar(sfWebRequest $request)
 {
     //serrando sessiones
    $this->getUser()->getAttributeHolder()->remove('ses_user_id_practil');
    $this->getUser()->getAttributeHolder()->remove('ses_user_id');
    $this->getUser()->getAttributeHolder()->remove('ses_user_nombre');
    $this->getUser()->getAttributeHolder()->remove('ses_user_ape');
    $this->getUser()->getAttributeHolder()->remove('ses_user_empresa');
    $this->getUser()->getAttributeHolder()->remove('ses_user_correo');
    //cerrar sesion del id de usuario en practil
    $this->getUser()->getAttributeHolder()->remove('ses_user_id_practil');
    $this->redirect('@homepage');

  }


  public function send_mail_comande($token_email,$txt_correo){
       try{
               $message = $this->getMailer()->compose();
               $message->setSubject('ACEPTOR - Confirmacion');
               $message->setTo($txt_correo);
               $message->setFrom(array('no-reply@aceptor.com' => 'Practil-Aceptor' ));
               $html = $this->getPartial('usuario/mensaje', array(
                    'domain' => sfConfig::get('app_url_aceptor'),
                    'token'=>$token_email,
                    'email'=>$txt_correo,
                   ));
               $message->setBody($html, 'text/html');
               $this->getMailer()->send($message);
               return true;
       }catch (Exception $e){
           return false;
       }

}


}
